home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 26 / CU Amiga Magazine's Super CD-ROM 26 (1998)(EMAP Images)(GB)[!][issue 1998-09].iso / CUCD / Utilities / XPK / Developers / Include / C / xpk / xpk.h next >
C/C++ Source or Header  |  1998-06-25  |  17KB  |  373 lines

  1. #ifndef XPK_XPK_H
  2. #define XPK_XPK_H
  3.  
  4. /*
  5. **    $VER: xpk/xpk.h 4.17 (25.06.1998) by SDI
  6. **
  7. **    (C) Copyright 1991-1998 by 
  8. **          Urban Dominik Mueller, Bryan Ford,
  9. **          Christian Schneider, Christian von Roques,
  10. **        Dirk Stöcker
  11. **        All Rights Reserved
  12. */
  13.  
  14. #ifndef EXEC_LIBRARIES_H
  15.   #include <exec/libraries.h>
  16. #endif
  17.  
  18. #ifndef EXEC_LISTS_H
  19.   #include <exec/lists.h>
  20. #endif
  21.  
  22. #ifndef UTILITY_TAGITEM_H
  23.   #include <utility/tagitem.h>
  24. #endif
  25.  
  26. #ifndef UTILITY_HOOKS_H
  27.   #include <utility/hooks.h>
  28. #endif
  29.  
  30. #define XPKNAME "xpkmaster.library"
  31.  
  32. /***************************************************************************
  33.  *
  34.  *
  35.  *      The packing/unpacking tags
  36.  *
  37.  * (TRUE) or (FALSE) mean the default value given by xpkmaster.library
  38.  *
  39.  */
  40.  
  41. #define XPK_TagBase    (TAG_USER + ('X'<<8) + 'P')
  42. #define XTAG(a)        (XPK_TagBase+a)
  43.  
  44. /* Caller must supply ONE of these to tell Xpk#?ack where to get data from */
  45. #define XPK_InName      XTAG(0x01) /* Process an entire named file */
  46. #define XPK_InFH      XTAG(0x02) /* File handle - start from current position */
  47.                      /* If packing partial file, must also supply InLen */
  48. #define XPK_InBuf      XTAG(0x03) /* Single unblocked memory buffer */
  49.                      /* Must also supply InLen */
  50. #define XPK_InHook      XTAG(0x04) /* Call custom Hook to read data */
  51.                      /* Must also supply InLen, when hook
  52.                         cannot do! (not for XPK unpacking) */
  53.  
  54. /* Caller must supply ONE of these to tell Xpk#?ackFile where to send data to */
  55. #define XPK_OutName      XTAG(0x10) /* Write (or overwrite) this data file */
  56. #define XPK_OutFH      XTAG(0x11) /* File handle - write from current position on */
  57. #define XPK_OutBuf      XTAG(0x12) /* Unblocked buffer - must also supply OutBufLen */
  58. #define XPK_GetOutBuf      XTAG(0x13) /* Master allocates OutBuf - ti_Data points to buf ptr */
  59. #define XPK_OutHook      XTAG(0x14) /* Callback Hook to get output buffers */
  60.  
  61. /* Other tags for Pack/Unpack */
  62. #define XPK_InLen      XTAG(0x20) /* Length of data in input buffer  */
  63. #define XPK_OutBufLen      XTAG(0x21) /* Length of output buffer         */
  64. #define XPK_GetOutLen      XTAG(0x22) /* ti_Data points to long to receive OutLen    */
  65. #define XPK_GetOutBufLen  XTAG(0x23) /* ti_Data points to long to receive OutBufLen */
  66. #define XPK_Password      XTAG(0x24) /* Password for de/encoding        */
  67. #define XPK_GetError      XTAG(0x25) /* ti_Data points to buffer for error message  */
  68. #define XPK_OutMemType      XTAG(0x26) /* Memory type for output buffer   */
  69. #define XPK_PassThru      XTAG(0x27) /* Bool: Pass through unrecognized formats on unpack */
  70. #define XPK_StepDown      XTAG(0x28) /* Bool: Step down pack method if necessary    */
  71. #define XPK_ChunkHook      XTAG(0x29) /* Call this Hook between chunks   */
  72. #define XPK_PackMethod      XTAG(0x2a) /* Do a FindMethod before packing  */
  73. #define XPK_ChunkSize      XTAG(0x2b) /* Chunk size to try to pack with  */
  74. #define XPK_PackMode      XTAG(0x2c) /* Packing mode for sublib to use  */
  75. #define XPK_NoClobber      XTAG(0x2d) /* Don't overwrite existing files  */
  76. #define XPK_Ignore      XTAG(0x2e) /* Skip this tag                   */
  77. #define XPK_TaskPri      XTAG(0x2f) /* Change priority for (un)packing */
  78. #define XPK_FileName      XTAG(0x30) /* File name for progress report   */
  79. #define XPK_ShortError      XTAG(0x31) /* !!! obsolete !!!                */
  80. #define XPK_PackersQuery  XTAG(0x32) /* Query available packers         */
  81. #define XPK_PackerQuery      XTAG(0x33) /* Query properties of a packer    */
  82. #define XPK_ModeQuery      XTAG(0x34) /* Query properties of packmode    */
  83. #define XPK_LossyOK      XTAG(0x35) /* Lossy packing permitted? (FALSE)*/
  84. #define XPK_NoCRC         XTAG(0x36) /* Ignore checksum                 */
  85. /* tags added for xfdmaster support (version 4 revision 25) */
  86. #define XPK_Key16      XTAG(0x37) /* 16 bit key (unpack only)    */
  87. #define XPK_Key32      XTAG(0x38) /* 32 bit key (unpack only)    */
  88.  
  89. /* preference depending tags added for version 4 - their default value
  90.  may depend on preferences, see <xpk/xpkprefs.h> for more info */
  91.  
  92. #define XPK_UseXfdMaster  XTAG(0x40) /* Use xfdmaster.library (FALSE)   */
  93. #define XPK_UseExternals  XTAG(0x41) /* Use packers in extern dir (TRUE)*/
  94. #define XPK_PassRequest   XTAG(0x42) /* automatic password req.? (FALSE)*/
  95. #define XPK_Preferences   XTAG(0x43) /* use prefs semaphore ? (TRUE)    */
  96. #define XPK_ChunkReport      XTAG(0x44) /* automatic chunk report ? (FALSE)*/
  97.  
  98. /* tags XTAG(0x50) to XTAG(0x6F) are for XpkPassRequest -- see below */
  99.  
  100. #define XPK_MARGIN    256    /* Safety margin for output buffer    */
  101.  
  102. /***************************************************************************
  103.  *
  104.  *
  105.  *     The hook function interface
  106.  *
  107.  */
  108.  
  109. /* Message passed to InHook and OutHook as the ParamPacket */
  110. struct XpkIOMsg {
  111.     ULONG xiom_Type        ; /* Read/Write/Alloc/Free/Abort    */
  112.     APTR  xiom_Ptr        ; /* The mem area to read from/write to */
  113.     LONG  xiom_Size        ; /* The size of the read/write        */
  114.     ULONG xiom_IOError    ; /* The IoErr() that occurred        */
  115.     ULONG xiom_Reserved    ; /* Reserved for future use        */
  116.     ULONG xiom_Private1    ; /* Hook specific, will be set to 0 by */
  117.     ULONG xiom_Private2    ; /* master library before first use    */
  118.     ULONG xiom_Private3    ;
  119.     ULONG xiom_Private4    ;
  120. };
  121.  
  122. /* The values for XpkIoMsg->Type */
  123. #define XIO_READ    1
  124. #define XIO_WRITE   2
  125. #define XIO_FREE    3
  126. #define XIO_ABORT   4
  127. #define XIO_GETBUF  5
  128. #define XIO_SEEK    6
  129. #define XIO_TOTSIZE 7
  130.  
  131. /***************************************************************************
  132.  *
  133.  *
  134.  *      The progress report interface
  135.  *
  136.  */
  137.  
  138. /* Passed to ChunkHook as the ParamPacket */
  139. struct XpkProgress {
  140.   ULONG     xp_Type;        /* Type of report: XPKPROG_#? numbers      */
  141.   STRPTR xp_PackerName;     /* Brief name of packer being used           */
  142.   STRPTR xp_PackerLongName; /* Descriptive name of packer being used       */
  143.   STRPTR xp_Activity;       /* Packing/unpacking message          */
  144.   STRPTR xp_FileName;       /* Name of file being processed, if available */
  145.   ULONG     xp_CCur;           /* Amount of packed data already processed      */
  146.   ULONG     xp_UCur;           /* Amount of unpacked data already processed  */
  147.   ULONG     xp_ULen;        /* Amount of unpacked data in file          */
  148.   LONG     xp_CF;            /* Compression factor so far          */
  149.   ULONG     xp_Done;           /* Percentage done already              */
  150.   ULONG     xp_Speed;          /* Bytes per second, from beginning of stream */
  151.   ULONG     xp_Reserved[8];    /* For future use                  */
  152. };
  153. #define XPKPROG_START    1    /* crunching started */
  154. #define XPKPROG_MID    2    /* somewhere in the mid */
  155. #define XPKPROG_END    3    /* crunching is completed */
  156.  
  157. /***************************************************************************
  158.  *
  159.  *
  160.  *       The file info block
  161.  *
  162.  */
  163.  
  164. struct XpkFib {
  165.     ULONG    xf_Type        ; /* Unpacked, packed, archive?   */
  166.     ULONG    xf_ULen        ; /* Uncompressed length          */
  167.     ULONG    xf_CLen        ; /* Compressed length            */
  168.     ULONG    xf_NLen        ; /* Next chunk len               */
  169.     ULONG    xf_UCur        ; /* Uncompressed bytes so far    */
  170.     ULONG    xf_CCur        ; /* Compressed bytes so far      */
  171.     ULONG    xf_ID        ; /* 4 letter ID of packer        */
  172.     UBYTE    xf_Packer[6]    ; /* 4 letter name of packer      */
  173.     UWORD    xf_SubVersion    ; /* Required sublib version      */
  174.     UWORD    xf_MasVersion    ; /* Required masterlib version   */
  175.     ULONG    xf_Flags    ; /* Password?                    */
  176.     UBYTE    xf_Head[16]    ; /* First 16 bytes of orig. file */
  177.     LONG    xf_Ratio    ; /* Compression ratio            */
  178.     ULONG    xf_Reserved[8]    ; /* For future use               */
  179. };
  180.  
  181. #define XPKTYPE_UNPACKED 0        /* Not packed                   */
  182. #define XPKTYPE_PACKED   1        /* Packed file                  */
  183. #define XPKTYPE_ARCHIVE  2        /* Archive                      */
  184.  
  185. #define XPKFLAGS_PASSWORD (1<< 0) /* Password needed              */
  186. #define XPKFLAGS_NOSEEK   (1<< 1) /* Chunks are dependent         */
  187. #define XPKFLAGS_NONSTD   (1<< 2) /* Nonstandard file format      */
  188. /* defines added for xfdmaster support (version 4 revision 25) */
  189. #define XPKFLAGS_KEY16      (1<< 3) /* 16 bit key - for decrunching */
  190. #define XPKFLAGS_KEY32      (1<< 4) /* 32 bit key - for decrunching */
  191.  
  192. /***************************************************************************
  193.  *
  194.  *
  195.  *       The error messages
  196.  *
  197.  */
  198.  
  199. #define XPKERR_OK      0
  200. #define XPKERR_NOFUNC       -1    /* This function not implemented    */
  201. #define XPKERR_NOFILES       -2    /* No files allowed for this function    */
  202. #define XPKERR_IOERRIN       -3    /* Input error happened            */
  203. #define XPKERR_IOERROUT       -4    /* Output error happened        */
  204. #define XPKERR_CHECKSUM       -5    /* Check sum test failed        */
  205. #define XPKERR_VERSION       -6    /* Packed file's version newer than lib */
  206. #define XPKERR_NOMEM       -7    /* Out of memory            */
  207. #define XPKERR_LIBINUSE       -8    /* For not-reentrant libraries        */
  208. #define XPKERR_WRONGFORM   -9    /* Was not packed with this library    */
  209. #define XPKERR_SMALLBUF       -10    /* Output buffer too small        */
  210. #define XPKERR_LARGEBUF       -11    /* Input buffer too large        */
  211. #define XPKERR_WRONGMODE   -12    /* This packing mode not supported    */
  212. #define XPKERR_NEEDPASSWD  -13    /* Password needed for decoding        */
  213. #define XPKERR_CORRUPTPKD  -14    /* Packed file is corrupt        */
  214. #define XPKERR_MISSINGLIB  -15    /* Required library is missing        */
  215. #define XPKERR_BADPARAMS   -16    /* Caller's TagList was screwed up    */
  216. #define XPKERR_EXPANSION   -17    /* Would have caused data expansion    */
  217. #define XPKERR_NOMETHOD    -18    /* Cannot find requested method        */
  218. #define XPKERR_ABORTED     -19    /* Operation aborted by user        */
  219. #define XPKERR_TRUNCATED   -20    /* Input file is truncated        */
  220. #define XPKERR_WRONGCPU    -21    /* Better CPU required for this library    */
  221. #define XPKERR_PACKED      -22    /* Data are already XPacked        */
  222. #define XPKERR_NOTPACKED   -23    /* Data not packed            */
  223. #define XPKERR_FILEEXISTS  -24    /* File already exists            */
  224. #define XPKERR_OLDMASTLIB  -25    /* Master library too old        */
  225. #define XPKERR_OLDSUBLIB   -26    /* Sub library too old            */
  226. #define XPKERR_NOCRYPT     -27    /* Cannot encrypt            */
  227. #define XPKERR_NOINFO      -28    /* Can't get info on that packer    */
  228. #define XPKERR_LOSSY       -29    /* This compression method is lossy    */
  229. #define XPKERR_NOHARDWARE  -30    /* Compression hardware required    */
  230. #define XPKERR_BADHARDWARE -31    /* Compression hardware failed        */
  231. #define XPKERR_WRONGPW     -32    /* Password was wrong            */
  232. #define XPKERR_UNKNOWN       -33    /* unknown error cause            */
  233. #define XPKERR_REQTIMEOUT  -34  /* password request reached time out    */
  234.  
  235. #define XPKERRMSGSIZE    80    /* Maximum size of an error message    */
  236.  
  237. /***************************************************************************
  238.  *
  239.  *
  240.  *     The XpkQuery() call
  241.  *
  242.  */
  243.  
  244. struct XpkPackerInfo {
  245.     UBYTE    xpi_Name[24]       ; /* Brief name of the packer          */
  246.     UBYTE    xpi_LongName[32]   ; /* Full name of the packer           */
  247.     UBYTE    xpi_Description[80]; /* One line description of packer    */
  248.     ULONG    xpi_Flags          ; /* Defined below                     */
  249.     ULONG    xpi_MaxChunk       ; /* Max input chunk size for packing  */
  250.     ULONG    xpi_DefChunk       ; /* Default packing chunk size        */
  251.     UWORD    xpi_DefMode        ; /* Default mode on 0..100 scale      */
  252. };
  253.  
  254. /* Defines for Flags */
  255. #define XPKIF_PK_CHUNK   (1<< 0) /* Library supplies chunk packing       */
  256. #define XPKIF_PK_STREAM  (1<< 1) /* Library supplies stream packing      */
  257. #define XPKIF_PK_ARCHIVE (1<< 2) /* Library supplies archive packing     */
  258. #define XPKIF_UP_CHUNK   (1<< 3) /* Library supplies chunk unpacking     */
  259. #define XPKIF_UP_STREAM  (1<< 4) /* Library supplies stream unpacking    */
  260. #define XPKIF_UP_ARCHIVE (1<< 5) /* Library supplies archive unpacking   */
  261. #define XPKIF_HOOKIO     (1<< 7) /* Uses full Hook I/O                   */
  262. #define XPKIF_CHECKING   (1<<10) /* Does its own data checking           */
  263. #define XPKIF_PREREADHDR (1<<11) /* Unpacker pre-reads the next chunkhdr */
  264. #define XPKIF_ENCRYPTION (1<<13) /* Sub library supports encryption      */
  265. #define XPKIF_NEEDPASSWD (1<<14) /* Sub library requires encryption      */
  266. #define XPKIF_MODES      (1<<15) /* Sub library has different XpkMode's  */
  267. #define XPKIF_LOSSY      (1<<16) /* Sub library does lossy compression   */
  268.  
  269. struct XpkMode {
  270.   struct XpkMode *xm_Next;   /* Chain to next descriptor for ModeDesc list*/
  271.   ULONG   xm_Upto;         /* Maximum efficiency handled by this mode   */
  272.   ULONG   xm_Flags;         /* Defined below                             */
  273.   ULONG   xm_PackMemory;     /* Extra memory required during packing      */
  274.   ULONG   xm_UnpackMemory;   /* Extra memory during unpacking             */
  275.   ULONG   xm_PackSpeed;      /* Approx packing speed in K per second      */
  276.   ULONG   xm_UnpackSpeed;    /* Approx unpacking speed in K per second    */
  277.   UWORD   xm_Ratio;         /* CF in 0.1%                  */
  278.   UWORD   xm_ChunkSize;         /* Desired chunk size in K (!!) for this mode*/
  279.   UBYTE   xm_Description[10];/* 7 character mode description              */
  280. };
  281.  
  282. /* Defines for XpkMode.Flags */
  283. #define XPKMF_A3000SPEED (1<< 0) /* Timings were made on A3000/25    */
  284.                  /* with AmigaVision executable        */
  285.                  /* (Standard test environment)        */
  286. #define XPKMF_PK_NOCPU   (1<< 1) /* Packing not heavily CPU dependent    */
  287. #define XPKMF_UP_NOCPU   (1<< 2) /* Unpacking... (i.e. hardware modes)    */
  288.  
  289. #define MAXPACKERS 100
  290.  
  291. struct XpkPackerList {
  292.     ULONG    xpl_NumPackers;
  293.     UBYTE    xpl_Packer[MAXPACKERS][6];
  294. };
  295.  
  296. /***************************************************************************
  297.  *
  298.  *
  299.  *     The XpkPassRequest() call (library version 4)
  300.  *
  301.  */
  302.  
  303. #define XPK_PassChars      XTAG(0x50) /* which chars should be used */
  304. #define XPK_PasswordBuf   XTAG(0x51) /* buffer to write password to */
  305. #define XPK_PassBufSize   XTAG(0x52) /* size of password buffer */
  306. #define XPK_Key16BitPtr      XTAG(0x53) /* pointer to UWORD var for key data */
  307. #define XPK_Key32BitPtr      XTAG(0x54) /* pointer to ULONG var for key data */
  308. #define XPK_PubScreen      XTAG(0x55) /* pointer to struct Screen */
  309. #define XPK_PassTitle      XTAG(0x56) /* Text shown in Screen title */
  310. #define XPK_TimeOut      XTAG(0x57) /* Timeout time of requester in seconds */
  311. /* request position and verify tags (version 4 revision 25) */
  312. #define XPK_PassWinLeft      XTAG(0x58) /* distance from left screen border */
  313. #define XPK_PassWinTop      XTAG(0x59) /* distance form top screen border */
  314. #define XPK_PassWinWidth  XTAG(0x5A) /* width of requester window */
  315. #define XPK_PassWinHeight XTAG(0x5B) /* height of requester window */
  316. #define XPK_PassCenter    XTAG(0x5C) /* Left and Top are used as center coords */
  317. #define XPK_PassVerify      XTAG(0x5D) /* force user to verify password */
  318.  
  319. /* XPKPASSFF defines for XPK_PassChars. Do not use. Use XPKPASSFLG defines */
  320.  
  321. #define XPKPASSFF_30x39        (1<< 0)    /* all numbers        */
  322. #define XPKPASSFF_41x46        (1<< 1)    /* chars 'A' to 'F'    */
  323. #define XPKPASSFF_61x66        (1<< 2)    /* chars 'a' to 'f'    */
  324. #define XPKPASSFF_47x5A        (1<< 3)    /* chars 'G' to 'Z'    */
  325. #define XPKPASSFF_67x7A        (1<< 4)    /* chars 'g' to 'z'    */
  326. #define XPKPASSFF_20        (1<< 5)    /* space character    */
  327. #define XPKPASSFF_SPECIAL7BIT    (1<< 6) /* special 7 bit chars  */
  328.         /* all chars 0x20 to 0x7E without above defined */
  329.  
  330. #define XPKPASSFF_C0xDE        (1<< 7)    /* upper special chars    */
  331. #define XPKPASSFF_DFxFF        (1<< 8)    /* lower special chars    */
  332. #define XPKPASSFF_SPECIAL8BIT    (1<< 9)    /* special 8 bit chars    */
  333.         /* all chars 0xA0 to 0xBF */
  334.  
  335. /* Control characters (0x00 to 0x1F, 0x7F and 0x80 to 0x9F) are not
  336.  * useable. This also means carriage return, linefeed, tab stop and
  337.  * other controls are not usable.
  338.  */
  339.  
  340. /* flags for XPK_PassChars, XPKPASSFLG_PRINTABLE is default
  341.  *
  342.  * NUMERIC    : numbers
  343.  * HEXADECIMAL    : hex numbers
  344.  * ALPHANUMERIC    : numbers and letters
  345.  * INTALPHANUM    : numbers and international letters
  346.  * ASCII7    : 7 Bit ASCII
  347.  * PRINTABLE    : all printable characters
  348.  */
  349.  
  350. #define XPKPASSFLG_NUMERIC    XPKPASSFF_30x39
  351. #define XPKPASSFLG_HEXADECIMAL    (XPKPASSFF_30x39|XPKPASSFF_41x46|XPKPASSFF_61x66)
  352. #define XPKPASSFLG_ALPHANUMERIC    (XPKPASSFLG_HEXADECIMAL|XPKPASSFF_47x5A|XPKPASSFF_67x7A)
  353. #define XPKPASSFLG_INTALPHANUM    (XPKPASSFLG_ALPHANUMERIC|XPKPASSFF_C0xDE|XPKPASSFF_DFxFF)
  354. #define XPKPASSFLG_ASCII7    (XPKPASSFLG_ALPHANUMERIC|XPKPASSFF_SPECIAL7BIT)
  355. #define XPKPASSFLG_PRINTABLE    (XPKPASSFLG_INTALPHANUM|XPKPASSFF_SPECIAL7BIT|XPKPASSFF_SPECIAL8BIT|XPKPASSFF_20)
  356.  
  357. /***************************************************************************
  358.  *
  359.  *
  360.  *     The XpkAllocObject() call (library version 4)
  361.  *
  362.  * use this always with library version >= 4, do NO longer allocate the
  363.  * structures yourself
  364.  *
  365.  */
  366.  
  367. #define XPKOBJ_FIB        0    /* XpkFib structure */
  368. #define XPKOBJ_PACKERINFO    1    /* XpkPackerInfo structure */
  369. #define XPKOBJ_MODE        2    /* XpkMode structure */
  370. #define XPKOBJ_PACKERLIST    3    /* XpkPackerList structure */
  371.  
  372. #endif /* XPK_XPK_H */
  373.